-- File
-- Create by weism
-- 文件相关操作的接口扩充

require("lfs");

file = file or {};

-- 取得文件名
function file.getFileName(file)
    local start = 1;

    -- 找到文件的开始位置
    for i = #file, 1, -1 do
        if 47 == string.byte(file, i) then
            start = i + 1;
            break;
        end
    end

    -- 找到文件的结束位置
    local str = string.sub(file, start);
    for i = #str, 1, -1 do
        if 46 == string.byte(str, i) then
            return string.sub(str, 1, i - 1);
        end
    end

    return str;
end

-- 取得扩展名
function file.getSuffix(file)
    for i = #file, 1, -1 do
        if 46 == string.byte(file, i) then
            return string.sub(file, i + 1);
        end
    end

    return "";
end

-- 取得文件所在的目录
function file.getPath(file)
    local arr = explode(file, "/");
    if #arr == 1 then return "" end
    return table.concat(arr, "/", 1, #arr - 1) .. "/";
end

-- 取得某一目录下的所有文件和文件夹
-- 返回：文件列表, 文件夹列表
function file.getdir(path)
    local file_list = {};
    local dir_list  = {};

    for file in lfs.dir(path) do
        -- 一些特殊目录需要过滤掉
        if (file ~= "." and file ~= ".." and file ~= ".svn") then
            local attrib = lfs.attributes(path .. "/" .. file);
            if (attrib.mode == "file") then
                table.insert(file_list, file);
            else
                table.insert(dir_list, file);
            end
        end
    end

    return file_list, dir_list;
end

-- 读取文件
function file.readFile(path)
    local fullPath = getFileWritableRoot() ..  path;
    local f = io.open(fullPath, "r");
    -- 本地没有该文件
    if f == nil then
        return;
    end
    local content = f:read("*all");
    f:close();
    local m = LPC.restoreString(content);
    return m;
end

-- 读取文件原始内容
function file.readFileRaw(path)
    local fullPath = getFileWritableRoot() ..  path;
    local f = io.open(fullPath, "r");
    -- 本地没有该文件
    if f == nil then
        return;
    end
    local content = f:read("*all");
    f:close();
    return content;
end

-- 保存文件
function file.writeFile(content, path)
    local fullPath = getFileWritableRoot() ..  path;
    -- 打开
    local f = io.open(fullPath, "w");
    -- 写入文件
    f:write(content);
    f:close();
end

-- 删除文件
function file.removeFile(path)
    local fullPath = getFileWritableRoot() .. path;
    return cc.FileUtils:getInstance():removeFile(fullPath);
end

-- 文件是否存在
function file.isFileExist(path)
    local fullPath = getFileWritableRoot() .. path;
    return cc.FileUtils:getInstance():isFileExist(fullPath);
end

-- 创建文件夹
function file.createDirectory(path)
    local fullPath = getFileWritableRoot() .. path;
    return cc.FileUtils:getInstance():createDirectory(fullPath);
end

-- 删除文件夹
function file.removeDirectory(path)
    local fullPath = getFileWritableRoot() .. path;
    return cc.FileUtils:getInstance():createDirectory(fullPath);
end

-- 文件夹是否存在
function file.isDirectoryExist(path)
    local fullPath = getFileWritableRoot() .. path;
    return cc.FileUtils:getInstance():isDirectoryExist(fullPath);
end

-- 返回当前可以写入的文件目录
function getFileWritableRoot()
    return cc.FileUtils:getInstance():getWritablePath();
end

-- 续写文件
function file.updateFile(content, path)
    local fullPath = getFileWritableRoot( ) ..  path;

    -- 打开
    local f = io.open(fullPath, "a+");
    -- 写入文件
    f:write(content);
    f:close();
end